pipx run
https://pipx.pypa.io/stable/docs/#pipx-run
#pipx
積ん読 https://pipx.pypa.io/stable/#walkthrough-running-an-application-in-a-temporary-virtual-environment
PEP 723 – Inline script metadataをサポート。使っていて便利なので実装を見ていく
--path Interpret app name as a local path
./script.py と渡さなくてもよさそう(TODO そもそも必要ないかも)
環境変数 PYTHONINSPECTを指定すると、pipx runの後に対話モードに入れる
POSIXではos.execvpeでプロセスが変わるため
書いた:Pythonスクリプトをpipx runで実行した後に対話モードに入るには、PYTHONINSPECT環境変数を指定する
gistのURLを渡せる(ただし拡張子.pyまで必要)
pipx runで実行される分岐
https://github.com/pypa/pipx/blob/1.5.0/src/pipx/main.py#L217-L228
commands.runはcommands.run.run
https://github.com/pypa/pipx/blob/1.5.0/src/pipx/commands/run.py#L177
どちらかを実行
run_script (PEP 723で便利なこちらを見る)
run_package
run_script https://github.com/pypa/pipx/blob/1.5.0/src/pipx/commands/run.py#L73
仮想環境を作る処理がある
https://github.com/pypa/pipx/blob/1.6.0/src/pipx/commands/run.py#L99-L102
👉subprocess.run https://github.com/pypa/pipx/blob/main/src/pipx/venv.py#L167
(書いたブログへのリンク)
exec_app を呼ぶ
pipx.util.exec_app https://github.com/pypa/pipx/blob/1.5.0/src/pipx/util.py#L351
POSIXでは os.execvpe
pipx runのプロセスがpythonのプロセスに変わる
_get_requirements_from_script
https://github.com/pypa/pipx/blob/1.5.0/src/pipx/commands/run.py
PEP 723をサポートしている箇所